home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / etc / gcvt.c < prev    next >
C/C++ Source or Header  |  1989-07-21  |  1KB  |  67 lines

  1. #if defined(LIBC_SCCS) && !defined(lint)
  2. static char sccsid[] = "@(#)gcvt.c    5.2 (Berkeley) 3/9/86";
  3. #endif LIBC_SCCS and not lint
  4.  
  5. /*
  6.  * gcvt  - Floating output conversion to
  7.  * minimal length string
  8.  */
  9.  
  10. char    *ecvt();
  11.  
  12. char *
  13. gcvt(number, ndigit, buf)
  14. double number;
  15. char *buf;
  16. {
  17.     int sign, decpt;
  18.     register char *p1, *p2;
  19.     register i;
  20.  
  21.     p1 = ecvt(number, ndigit, &decpt, &sign);
  22.     p2 = buf;
  23.     if (sign)
  24.         *p2++ = '-';
  25.     for (i=ndigit-1; i>0 && p1[i]=='0'; i--)
  26.         ndigit--;
  27.     if (decpt >= 0 && decpt-ndigit > 4
  28.      || decpt < 0 && decpt < -3) { /* use E-style */
  29.         decpt--;
  30.         *p2++ = *p1++;
  31.         *p2++ = '.';
  32.         for (i=1; i<ndigit; i++)
  33.             *p2++ = *p1++;
  34.         *p2++ = 'e';
  35.         if (decpt<0) {
  36.             decpt = -decpt;
  37.             *p2++ = '-';
  38.         } else
  39.             *p2++ = '+';
  40.         *p2++ = decpt/10 + '0';
  41.         *p2++ = decpt%10 + '0';
  42.     } else {
  43.         if (decpt<=0) {
  44.             if (*p1!='0')
  45.                 *p2++ = '.';
  46.             while (decpt<0) {
  47.                 decpt++;
  48.                 *p2++ = '0';
  49.             }
  50.         }
  51.         for (i=1; i<=ndigit; i++) {
  52.             *p2++ = *p1++;
  53.             if (i==decpt)
  54.                 *p2++ = '.';
  55.         }
  56.         if (ndigit<decpt) {
  57.             while (ndigit++<decpt)
  58.                 *p2++ = '0';
  59.             *p2++ = '.';
  60.         }
  61.     }
  62.     if (p2[-1]=='.')
  63.         p2--;
  64.     *p2 = '\0';
  65.     return(buf);
  66. }
  67.